<template>
 <el-scrollbar >
  <div class="app-container">
    <el-card class="box-card" >
      <div slot="header" class="clearfix">
        <!-- <el-button style="float: left;" size="small" type="danger" @click="goBack">关闭</el-button> -->
         <div style="text-align:left" v-show="!isView">审批操作</div>
         <!-- 操作栏按钮 -->
                <div  v-show="!isView" class="b-t-solid border-t-[1px] border-[var(--el-border-color)]">
          <ProcessInstanceOperationButton
            ref="operationButtonRef"
            :process-instance="processInstance"
            :process-definition="processDefinition"
            :isView="isView"
            @success="refresh" @opentail="opentail"
          />
        </div>
      </div>
      <el-collapse-transition>
      <el-tabs  tab-position="top" v-model="activeName" @tab-click="handleClick" v-show="detailOpen">
        <!--流程流转记录-->
        <el-tab-pane label="流转记录" name="2">

          
          <el-col :span="20" :offset="1">
             <ProcessInstanceStepOne :checker="checker" :checkdate="checkdate" v-if="procInsId=='0'" />
        <ProcessInstanceStep :activity-nodes="activityNodes" v-else />
        
         </el-col>
          <!-- <el-col :span="16" :offset="4">
            <ProcessInstanceTimeline :activity-nodes="activityNodes" />
         </el-col> -->
      <el-table :data="taskList" border header-cell-class-name="table-header-gray"  v-if="procInsId!='0'">
    <el-table-column label="审批节点" prop="name" min-width="120" align="center" />
    <el-table-column label="审批人" min-width="100" align="center">
      <template #default="scope">
        {{ scope.row.assigneeUser?.nickName || scope.row.ownerUser?.nickName }}
      </template>
    </el-table-column>
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="开始时间"
      prop="createTime"
      min-width="140"
    />
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="结束时间"
      prop="endTime"
      min-width="140"
    />
    <el-table-column align="center" label="审批状态" prop="status" min-width="90">
      <template #default="scope">
        <dict-tag :options="bpm_task_status" :value="scope.row.status" />
      </template>
    </el-table-column>
    <el-table-column align="center" label="审批建议" prop="reason" min-width="200">
      <template #default="scope">
        {{ scope.row.reason }}
      </template>
    </el-table-column>
    <el-table-column align="center" label="耗时" prop="durationInMillis" min-width="100">
      <template #default="scope">
        {{ formatPast2(scope.row.durationInMillis) }}
      </template>
    </el-table-column>
  </el-table>


    <el-table :data="tableData" border header-cell-class-name="table-header-gray" v-if="procInsId=='0'">
    <el-table-column label="审批节点" prop="name"  min-width="120" align="center" />
     <el-table-column label="审批人" min-width="120"  prop="checker" align="center" />
      <el-table-column label="审批时间"  min-width="120" prop="checkdate" align="center" />
         <el-table-column align="center" label="审批状态" prop="status" min-width="90">
      <template #default="scope">
        <dict-tag :options="bpm_task_status" :value="scope.row.status" />
      </template>
    </el-table-column>
    </el-table>
        </el-tab-pane>
        <!--流程图-->
        <el-tab-pane label="流程图" name="3" v-if="procInsId!='0'">
        <!-- <bpmn-viewer :flowData="flowData"  :procInsId="taskForm.procInsId"/>  -->
          <ProcessInstanceBpmnViewer
                :loading="processInstanceLoading"
                :model-view="processModelView"
              />
        </el-tab-pane>
    </el-tabs>
     </el-collapse-transition>

    </el-card>
  </div>

    </el-scrollbar>
</template>

<script setup name="Record" >
import { dateFormatter, formatPast2 } from '@/utils/formatTime'
import {getTaskListByProcessInstanceId} from "@/api/flowable/todo";
import {flowRecord} from "@/api/flowable/finished";
import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition";
import {getApprovalDetail,getProcessInstanceBpmnModelView} from "@/api/flowable/instance";
import ProcessInstanceBpmnViewer from './ProcessInstanceBpmnViewer.vue'
import ProcessInstanceTimeline from './ProcessInstanceTimeline';
import ProcessInstanceOperationButton from './ProcessInstanceOperationButton.vue'
import ProcessInstanceStep from './ProcessInstanceStep'
import ProcessInstanceStepOne from './ProcessInstanceStepOne'

const props = defineProps({
  procInsId: {
    type: String,
    default: "",
  },
    checker: {
    type: String,
    default: "admin",
  },
    checkdate: {
    type: String,
    default: "1900-12-12 12:56:77",
  },
  isView:{
     type: Boolean,
     default:false
  }

});


      // 模型xml数据
    const route = useRoute()
    const { proxy } = getCurrentInstance();
    const { bpm_task_status } = proxy.useDict("bpm_task_status");
    const flowData=ref({});
    const activeName= '2';
    const  activityNodes=ref([]);
    const processModelView = ref({});
    const operationButtonRef = ref() // 操作按钮组件 ref
    const processInstanceLoading = ref(false) // 流程实例的加载中
    const processInstance = ref({}) // 流程实例
    const processDefinition = ref({}) // 流程定义
      // 查询参数
    const queryParams=ref({});
      // 遮罩层
    const loading=ref(true);
    const flowRecordList=ref([]); // 流程流转数据
    const taskList=ref([]);//流程任务的数组
    const taskForm=reactive({
        multiple: false,
        comment:"", // 意见内容
        procInsId: "", // 流程实例编号
        instanceId: "", // 流程实例编号
        deployId: "",  // 流程定义编号
        taskId: "" ,// 流程任务编号
        procDefId: "",  // 流程编号
      });
     

  const tableData =reactive( [
  {
    checkdate: props.checkdate,
    name: '科研管理员',
    checker: props.checker,
    status:2
    
  }
  
])
  const detailOpen = ref(false);
const emit = defineEmits(['success']) 
 function created() {
    taskForm.deployId = route.query && route.query.deployId;
    taskForm.taskId  = route.query && route.query.taskId;
    taskForm.procInsId = props.procInsId;
    // 流程任务重获取变量表单
    //processVariables( taskForm.taskId)
   // getFlowRecordList(taskForm.procInsId, taskForm.deployId);
   
  if(props.procInsId=='0'){
     console.log("props",props)
  }
 
    else{
    ApprovalDetail(taskForm.procInsId, taskForm.deployId)
    TaskListByProcessInstanceId(taskForm.procInsId);
    }
  }

  /** 获取流程模型视图*/
const getProcessModelView = async () => {
 
    // 重置，解决 BPMN 流程图刷新不会重新渲染问题
    processModelView.value = {
      bpmnXml: ''
    }
  const data = await getProcessInstanceBpmnModelView(taskForm.procInsId)
  if (data) {
    processModelView.value = data
  }
}
  
  function  handleClick(tab, event) {
      if (tab.props.name === '3'){
    
      getProcessInstanceBpmnModelView(taskForm.procInsId).then(res=>{
        processModelView.value = res.data;
      })
      }
    }
 function   setIcon(val) {
      if (val) {
        return "el-icon-check";
      } else {
        return "el-icon-time";
      }
    }
   function setColor(val) {
      if (val) {
        return "#2bc418";
      } else {
        return "#b3bdbb";
      }
    }
/**
 * 操作成功后刷新
 */
const refresh = () => {
  // 重新获取详情
  getDetail()
   emit('success')

}

const opentail=()=>{

  console.log("wo shi  sb")
    detailOpen.value = !detailOpen.value
}

/** 获得详情 */
const getDetail = () => {
  ApprovalDetail(taskForm.procInsId, taskForm.deployId)

  getProcessModelView()
  TaskListByProcessInstanceId(taskForm.procInsId)
}

    //流程任务的数组
   function  TaskListByProcessInstanceId(procInsId) {
      getTaskListByProcessInstanceId(procInsId).then(res => {
        taskList.value = res.data;
      }).catch(res => {
        goBack();
      })
    };
    /** 流程流转记录 */
   function getFlowRecordList(procInsId, deployId) {
     
      const params = {procInsId: procInsId, deployId: deployId}
      flowRecord(params).then(res => {
        flowRecordList.value = res.data.flowList;
      }).catch(res => {
        goBack();
      })
    }

    function ApprovalDetail(procInsId, deployId) {
     
      const params = {processInstanceId: procInsId, deployId: deployId}
      getApprovalDetail(params).then(res => {
        activityNodes.value=res.data.activityNodes
        processInstance.value = res.data.processInstance
      
        processDefinition.value =res.data.processDefinition
        operationButtonRef.value?.loadTodoTask(res.data.todoTask)
        console.log("getApprovalDetail",res.data)
      }).catch(res => {
        //goBack();
        console.log("res",res)
      })
    }

    /** 返回页面 */
  function  goBack() {
      // 关闭当前标签页并返回上个页面
      const obj = { path: "/task/process", query: { t: Date.now()} };
      proxy.$tab.closeOpenPage(obj);
    }
  
   created()  

   watch(props,(val)=>{
  console.log('接受父组件传给子组件的值value',props.isView)
  if(props.isView){
    detailOpen.value=true
  }
})
onMounted(() => {
   if(props.isView){
    detailOpen.value=true
  }
});
</script>
<style lang="scss" scoped>
.test-form {
  margin: 15px auto;
  width: 800px;
  padding: 15px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}

.el-tag + .el-tag {
  margin-left: 10px;
}

.my-label {
  background: #E1F3D8;
}
</style>
